﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;
//给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和并同样以字符串形式返回。
//
//你不能使用任何內建的用于处理大整数的库（比如 BigInteger）， 也不能直接将输入的字符串转换为整数形式。

//leetcode415

//从后往前相加，相加的结果到字符串可以使用insert头插
//或者 += 尾插以后再reverse过来
//
//注意进位处理
//两个都结束才结束
//同时结束但是还有进位

class Solution {
public:
    string addStrings(string num1, string num2) {
        int end1 = num1.size() - 1, end2 = num2.size() - 1;
        int next = 0;//判断进位
        string retStr;
        //从后往前相加，相加的结果到字符串可以使用insert头插
        //或者+=尾插以后再reverse过来
        while (end1 >= 0 || end2 >= 0)
        {
            //因为要考虑进位所以所以两个字符串都结束是才结束
            //x1,x2默认都为1如果没结束就改为end位置处的值
            int x1 = 0;
            if (end1 >= 0)
                x1 = num1[end1--] - '0';//转换为int
            int x2 = 0;
            if (end2 >= 0)
                x2 = num2[end2--] - '0';
            int retval = x1 + x2 + next;//加上next
            if (retval > 9)
            {
                next = 1;
                retval -= 10;
            }
            else
            {
                next = 0;//如果没进位要将next置为0
            }
            //insert头插到retStr
            //retStr.insert(retStr.begin(),retval+'0');
            retStr += (retval + '0');
        }
        if (next == 1)
        {
            //retStr.insert(retStr.begin(),'1');
            retStr += '1';
        }
        reverse(retStr.begin(), retStr.end());
        return retStr;

    }
};